home *** CD-ROM | disk | FTP | other *** search
-
- incdir _include:
- include exec/exec.i
- include libraries/dos_lib.i
- include libraries/exec_lib.i
- include libraries/dosextens.i
- include include:libraries/xpk.i
-
- start: move.l 4.w,a6
- lea xpkname(pc),a1
- jsr _LVOOldOpenLibrary(a6)
- move.l d0,xpkbase ; Store XPK Library base!
- beq.b cleanup ; ERROR -> Exit
-
- move.l d0,a6 ; XPKBase to A6
- lea tags(pc),a0
- jsr _LVOXpkPack(a6)
- tst.l d0
- beq.w noerror
-
- move.w #$ff0,$dff180
-
- noerror
-
- cleanup move.l xpkbase(pc),d0
- beq.b exit ; Library not open
- move.l d0,a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6) ; Close XPK library
-
- exit moveq #0,d0 ; No error code!
-
- lea dst,a0
- move.l 4(a0),d0 ; packed size
- move.l #srclen,d1
- move.l d1,d2 ;d1=original size..
- sub.l d0,d2
- move.l d1,d3
- getgain1: tst.l d2
- bmi.s getgain2
- tst.l d3
- bmi.s getgain2
- add.l d2,d2
- add.l d3,d3
- bra.s getgain1
-
- getgain2: lsr.l #1,d2
- lsr.l #1,d3
- clr.w d2
- clr.w d3
- swap d2
- swap d3
- mulu #100,d2
- divu d3,d2
- ;-------------- d2.w = % gain
- ; d0.l = new size
- ; d1.l = old size
-
- lea errbuf(pc),a0
-
- lea dst+48,a1
- lea -48(a1,d0.l),a2
- rts
-
- xpkbase: dc.l 1
-
- tags: dc.l XPK_InBuf,src
- dc.l XPK_InLen,srclen
- dc.l XPK_OutBuf,dst
- dc.l XPK_OutBufLen,(srclen)+(srclen/2)
- dc.l XPK_FindMethod,packmode
- dc.l XPK_PackMode,packmode
- dc.l XPK_GetError,errbuf ; A pointer to the error message buffer
- dc.l TAG_DONE
-
- errbuf: ds.b 82
- even
- packmode: dc.b 'CRM2',0
- even
- xpkname: dc.b 'xpkmaster.library',0
- even
- src: incbin 'dl:68khelper/mod.bonus'
- srcend even
- srclen = srcend-src
- dst: ds.b 10240*2
- end
-